﻿using System;
using System.ComponentModel;
using System.Globalization;

namespace MathService.Vectors
{
    internal class SpaceAngleConverter : TypeConverter<SpaceAngle>
    {
        public override object ConvertFrom(ITypeDescriptorContext Context, CultureInfo Info, object value)
        {
            //Не указано объекта для преобразования
            if(value == null)
                throw new ArgumentNullException(nameof(value));

            //Оргумент не является трокой, либо строка пуста
            var lv_Str = value as string;
            if(string.IsNullOrEmpty(lv_Str) || lv_Str.Length < 1)
                return base.ConvertFrom(Context, Info, value);

            //Contract.Requires(lv_Str.Length > 0);
            //Убираем все начальные и конечные скобки, ковычки и апострофы
            while(lv_Str[0] == '{' && lv_Str[lv_Str.Length - 1] == '}')
                lv_Str = lv_Str.Substring(1, lv_Str.Length - 2);
            while(lv_Str[0] == '[' && lv_Str[lv_Str.Length - 1] == ']')
                lv_Str = lv_Str.Substring(1, lv_Str.Length - 2);
            while(lv_Str[0] == '(' && lv_Str[lv_Str.Length - 1] == ')')
                lv_Str = lv_Str.Substring(1, lv_Str.Length - 2);
            while(lv_Str[0] == '\'' && lv_Str[lv_Str.Length - 1] == '\'')
                lv_Str = lv_Str.Substring(1, lv_Str.Length - 2);
            while(lv_Str[0] == '"' && lv_Str[lv_Str.Length - 1] == '"')
                lv_Str = lv_Str.Substring(1, lv_Str.Length - 2);

            lv_Str = lv_Str.Replace(" ", "");

            throw new NotImplementedException();

            //var val = lv_Str.Split(';', ':', '|').ConvertTo(s => double.Parse(s));

            //if(val.Length != 2)
            //    throw new ArgumentNullException("value");

            //return new Vector2D(val[0], val[1]);
        }
    }
}